package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootQd;
import org.footballmanager.pandafootball.system.domain.FootTt;
import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.form.impl.FootTtSearchForm;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface FootTtService extends RepeatService<FootTt> {
    /**
     * 根据对战双方的主力战斗力算出胜负
     *
     * @param userId1 主队用户主键
     * @param userId2 客队用户主键
     * @param request 请求
     * @return true user1获胜 false user2获胜 null 平手
     */
    String winner(Long userId1, Long userId2, HttpServletRequest request);

    /**
     * 获取天梯赛积分榜
     *
     * @return 天梯赛积分榜
     */
    List<FootTt> getScoreboard();

    /**
     * 添加新的天梯赛到数据库
     *
     * @param user    用户实体类
     * @param qdId    球队主键
     * @param request 请求
     */
    void saveNewTt(FootUser user, Long qdId, HttpServletRequest request);

    /**
     * 根据用户主键查找对应所有的天梯赛信息
     *
     * @param userId 用户主键
     * @return 天梯赛信息列表
     */
    List<FootTt> getTtsByUserid(Long userId);

    /**
     * 更新天梯赛的球队名称
     *
     * @param userId  用户主键
     * @param qd      球队实体类
     * @param request 请求
     */
    void updateTtQdName(Long userId, FootQd qd, HttpServletRequest request);

    /**
     * 发放天梯赛的奖励
     *
     * @param request 请求
     */
    void reward(HttpServletRequest request);

    /**
     * 查找是否有重复数据
     *
     * @param footTt 天梯赛实体类
     * @return 是否重复
     */
    boolean findRepeatData(FootTt footTt);

    /**
     * 翻页方法
     *
     * @param footTtSearchForm 条件
     * @return 列表
     */
    List<FootTt> findall(FootTtSearchForm footTtSearchForm);

    /**
     * 查询
     *
     * @param entityname       实体类名
     * @param map              参数
     * @param footTtSearchForm 条件
     */
    void search(String entityname, Model map, FootTtSearchForm footTtSearchForm);

    /**
     * 重新计算排名
     *
     * @param request 请求
     */
    void reComputeRanking(HttpServletRequest request);

    /**
     * 根据用户主键删除对应记录
     *
     * @param userId  用户主键
     * @param request 请求
     */
    void deleteByUserId(Long userId, HttpServletRequest request);
}